package com.datastructure.test.maxsubarraylengthtwo;

public class MaxSubArrayLengthTwo {

    public static void main(String[] args) {
        MaxSubArrayLengthTwo maxSubArrayLengthTwo = new MaxSubArrayLengthTwo();
        int[] nums = {2,2,3,4};
        int subArrayLengthTwo = maxSubArrayLengthTwo.maxSubArrayLengthTwo(nums);
        System.out.println(subArrayLengthTwo);
    }

    public int maxSubArrayLengthTwo (int[] nums) {
        // write code here
        int n = nums.length;
        if (n == 1) {
            return 1;
        }
        int[] left = new int[n];
        int[] right = new int[n];
        left[0] = 1;
        for (int i = 1; i < n; i++) {
            if (nums[i - 1] < nums[i]) {
                left[i] = left[i - 1] + 1;
            } else {
                left[i] = 1;
            }
        }
        right[n - 1] = 1;
        for (int i = n - 2; i >= 0; i--) {
            if (nums[i + 1] > nums[i]) {
                right[i] = right[i + 1] + 1;
            } else {
                right[i] = 1;
            }
        }
        int res = 0;
        for (int i = 0; i < n; i++) {
            if (i > 0) {
                res = Math.max(res, left[i - 1] + 1);
            }

            if (i < n - 1 && nums[i + 1] > 1) {
                res = Math.max(res, right[i + 1] + 1);
            }

            if (i > 0 && i < n - 1 && nums[i + 1] - nums[i - 1] > 1) {
                res = Math.max(res, left[i - 1] + right[i + 1] + 1);
            }
        }
        return res;
    }
}
